ЖДУ 2024-2025
    Головна
    Змагання
    Лекції
    Курси
    Дописи
    Лабораторні роботи
    Архів Олімпіад
Рядки в C++ (клас string)
Увійти

Рядки в C++ (клас string)

Основи роботи з рядками в мові C++

В мові C++ для зручності з рядками створеноклас string, для використання якого необхідно підключити бібліотеку <string>.

Рядки можна оголосити і одночасно присвоїти їм значення:

string S1, S2 = "Hello";

Рядок S1 будет пустий, рядок S2 будет містити 5 символів.

До окремих символів рядка можна звертатися за індексом, як до елементів масиву або C-рядків. Наприклад S [0] - це перший символ рядка.

Для того, щоб дізнатися довжину рядка можна використовувати метод size() рядки. Наприклад, останній символ рядка S це S[S.size()-1].

Конструктори рядків

Рядки можна створювати з використанням наступних конструкторів:

string() - конструктор по замовчуванні (без параметров) створює пустий рядок.

string(string & S) - копия рядка S

string(size_t n, char c) - повторення символа c задане n разів.

string(size_t c) - рядок із одного символа c.

string(string & S, size_t start, size_t len) - рядок, містить не більше, ніж len символів данногорядка S, починаючи з символа номер start.

Конструктори можно викликати явно, наприклад, так:

S += string(10, 'z');

В цьому прикладі явно викликається конструктор string для скворення рядка, що містить з 10 символів 'z'.

Неявно конструктор вкликається при оголошенні рядка з вказанням додаткових параметрів. Наприклад, так:

string S(10, 'z');

Введення-виведення рядків

Рядок виводиться так само, як ы числові значення:

cout << S;

Для зитування рядка можна використовувати операцію ">>" для об'єкта cin:

cin >> S;

В цьому випадку зчитується рядок до пропуска. Це зручно коли потрібно рядок розбити на слова, або щоб читати дані до кінця файла за допомогою

while (cin >> S).
{
   
}

Можна зчитувати рядки до появлення символа кынця рядка за допомогоюи функції getline. Сам символ кінця зчитується з вхідного потока, ала до рядка не добавляється:

getline(cin, S);

Арифметичені оператори

Із рядками можна виконувати наступні арифметичні операції:

= - присваивоєння значення.

+= - добавлення в кінець рядка інший рядок або символ.

    • конкатенація двух рядків, конкатенація рядка і символа.==, != - посимвольне порівняння.<, >, <=, >= - лексикографічесне порівняння.

Тобто якщо можна скопіювати зміст одного рядка в іншийза допомогою операції S1 = S2, порівнювати два рядки на рівність за допомогою S1 == S2, порівнювати в лексикографічному порядку за допомогою S1 < S2, або зробити додавання (конкатенацию) двохх рядків у вигляді S = S1 + S2.

Методи опрацювання рядків

У string є різні методи, багато з них можна використовувати декількома різними способами (з різним набором параметрів).

Розглянемо методи детальныше.

size

Метод size() визначає довжину рядка. Значення що повертається є беззнаковим типом (як і у всіх випадках, коли функція визначає значення, рівне тривалість строку або індексу елемента - ці значення беззнакові).Крім того, у string строк є метод length(), який також повертає довжину рядка.

resize

S.resize(n) - Змінює довжину рядка, нова довжина рядка стає n. При цьому рядок може бути як зменшений, так і збільшений. Якщо викликати метод у вигляді S.resize (n, c), де c - символ, для збільшення розміру строки додані символи будуть дорівнювати c.

clear

S.clear() - очищає рядок, рядок стає пустим.

empty

S.empty() - повертає true, якщо рядок пустий, false - якщо непустий.

push_back

S.push_back(c) - додає в кінець рядка символ c, викликається з одним параметром типу char.

append

Додає в кінець рядкаи кілька символів, другий рядок або фрагмент іншого рядка. Має багато способів виклику.

S.append(n, c) - додає в кінець рядка n однакових символів, равних с. n має цілочисельний тип, c - char.

S.append(T) - додає в кінець рядка S вміст рядка T. T може бути об'єктом класу string або C-рядком.

S.append (T, pos, count) - додає в кінець рядка S символи рядка T посинаючи з символа з індексом pos кількістью count.

erase

S.erase(pos) - видаляє з рядка S символи починаючи з індекса pos і до конца рядка.

S.erase(pos, count) - видаляє з рядка S починаючи з символа з індексом pos кількість count або до кінця рядка, якщо pos + count > S.size().

insert

Вставляє в середину рядка кілька символів, іншого рядка або фрагмент іншого рядка. Перший вставлений символ буде мати індекс i, і всі символи, здвигаються вправо.

S.insert (i, n, c) - вставити n одинакових символів, равних с. n цілий тип, c - char.

S.insert (i, T) - вставити рядок T. T може бути об’єктом класу string або C-рядком.

S.insert (i, T, pos, count) - вставити символи рядка T починаючи з символа з індексом pos кількістью count.

substr

S.substr(pos) - повертає підрядок цього рядка починаючи з символами з індексом pos і до кінця рядка.

S.substr (pos, count)- повертає підрядок цього рядка починаючи з символа з індексом pos кількістю count або до кінца рядка, якщо pos + count> S.size ().

replace

Замінює фрагмент рядка на інший фрагметн або рядок,

S.replace (pos, count, n, c) - вставити n одинакових символів, рівних с. n має цілий тип, c - char.

S.replace (pos, count, T) - вставити вміст рядка T. T може бути об'єктом класу string або C-рядком.

S.replace (pos, count, T, pos2, count2) - вставити символи рядка T починаючи з символа з індексом pos кількістьм count.

Детальніше про методи замінити.

find

Шукає в рядка перше входження іншого рядка. Повертає номер першого символа, починаючи з якого далі іде підрядок, що шукається. Якщо рядок не знайдено, то повернеться значення string::npos (= -1).

Якщо задано значення pos, то пошук починається з позицій pos. Якщо значення pos не вказане, то вважається рівним 0 - пошук здійснюється з початку рядка.

S.find(str, pos = 0) - шукати перше входіння рядка str починаючи з позиції pos. Якщо пос не задано - то начинна з початку рядка.

S.find (str, pos, n) - шукати в рядку підрядок, що дорівнює першим n символам рядка str. Значення pos повинно бути заданим.

rfind

Шукакє останнє входження підрядка ("правий" пошук). Способи виклика аналогічного способу виклика метода find.

find _ first _ of

Шукає в рядку перше входження будь-якого із символів цього рядка. Вповертає номер цього символа або значення string :: npos.

Якщо задано значення pos, то пошук починається з позицій pos.

####'find _ first _ not _ of'

Шукає в даному рядку перше входження символа, що відрізняється від символів рядка str. Способи ввклику і повернення значення аналогічні методу find _ first _ of.

  //  виводить позиції цифр в рядку та їх кількість
   string s="1234567890";
   string s1 ="hkjh4534hkj43kjh4k53h";
   int k=0;
   int t=0;
     while(t!=-1)
     {
         t=s1.find_first_of(s,t+1) ;
         if(t!=-1) cout<<t<<" ";
         k++;
     }
11 lines
268 bytes

find _ last _ not _ of

Шукає в даному рядку останнє входження символа, що відрізняється від символів рядка str. Способи ввклику і повернення значення аналогічні методу find _ first _ of.

c_str

Повертає вказівник на область пам'яті, в якій зберігаються символи рядка, возвращает значение типа char*. Возвращаемое значение можно рассматривать как C-строку и использовать в функциях, которые должны получать на вход C-строку.

char s[100];
string ss="abcd";
strcpy( s, ss.c_str() );
cout<<s<<endl;

stoi

Перетворює рядок в число

string s="123";
int n= s.stoi(s);
cout<<n;

Стандартна бібліотека С++ також представляє ряд вбудованих функцій для роботи з символами. Вони пов'язані з перевіркою символів:

isupper(c): перевіряє, чи є даний символ великою літерою (літерою верхнього регістру), від "A" до "Z"

islower(c): перевіряє, чи є даний символ маленькою літерою (літерою нижнього регістру) від 'a' до 'z'

isalpha(c): перевіряє, чи є даний символ літерою алфавіту

isdigit(c): перевіряє, чи є даний символ цифрою от '0' до '9'

isxdigit(c): перевіряє, чи є даний символ літерою шістнадцятковою цифрою, від '0' до '9', от 'a' до 'f' або від 'A' до 'F'

isalnum(c): перевіряє, чи є даний символ алфавітно-цифровим символом; аналогічно isisalpha(c) || isdigit(c)

isspace(c): перевіряє, чи є даний символ пропуском (' '), символом переходом рядка ('\n'), повернення каретки ('\r'), переходом сторінки ('\f'), горизонтальна ('\t') або вертикальна ('\v') табуляція

isblank(c): перевіряє, чи є даний символ c пропуском (' ') або символом табуляції ('\t')

ispunct(c): перевіряє, чи є даний символ c символом пунктуації (один з наступних: _ { } [ ] # ( ) < > % : ; ? * + - / ^ & | ~ ! "=")

isprint(c): перевіряє, чи є даний символ c друкованим символом, який включає великі або маленькі літери,цифри, знаки пунктуації і пропуски

iscntrl(c): перевіряє, чи є даний символ c керуючим недрукованим символом

isgraph(c): перевіряє, чи є даний символ c графічним представленням

tolower(c): переводить символ c в нижній регістр

toupper(c): переводить символ c в верхній регістр

У цій статті
  • Рядки в C++ (клас string)
  • Основи роботи з рядками в мові C++
  • Конструктори рядків
  • Введення-виведення рядків
  • Арифметичені оператори
  • Методи опрацювання рядків
  • size
  • resize
  • clear
  • empty
  • push_back
  • append
  • erase
  • insert
  • substr
  • replace
  • find
  • rfind
  • find _ first _ of
  • find _ last _ not _ of
  • c_str
  • stoi
  • Стандартна бібліотека С++ також представляє ряд вбудованих функцій для роботи з символами. Вони пов'язані з перевіркою символів: